

def consumer():
    """
    消费者
    :return:
    """
    print("----------- 消费者 -------------")
    # 保存消费结果
    result = ''
    # 开始消费
    while True:
        # 消费者需要消费商品, 商品由生产者提供商品
        # 此时方法的执行权 应该由消费者变回生产者
        n = yield result
        # 如果没有商品了
        if not n:
            return
        print(f"消费者....通过购买{n}个商品")
        result = '1000$'


def product(consumer):
    """
    生产者
    :return:
    """
    print("------------ 生产者 ----------------")
    # 此时生产者需要接到消费者的消费需求, 才生产商品
    # 此时虽然调用的是product方法, 但是需要将方法的执行权交给消费者
    # 启动生成器对象
    next(consumer)
    # 生产者生产商品
    # 商品
    n = 0
    while n < 5:
        # 生产
        n += 1
        print(f"生产者生产了....第{n}个商品")
        # 将生产好的商品交给消费者消费
        result = consumer.send(n)
        print(f"生产者通过售卖{n}个商品得到{result}")


if __name__ == "__main__":
    c = consumer()
    # 传统的生产消费都是从生产者发起的
    product(c)
